#pragma once


#include "Expression.h"


class Money;
typedef std::shared_ptr<Money> MoneySp;
typedef std::shared_ptr<const Money> CMoneySp;


class Money : public Expression
{
public:
	Money( int iAmount, const std::tstring& cstrCurrency );
	virtual ~Money();


	static MoneySp Dollar( int iAmount );
	static MoneySp Franc( int iAmount );

	bool operator ==( const Expression& cRight ) const;
	ExpressionSp operator *( int iMultiplier ) const;
	ExpressionSp operator +( const Expression& cAddend ) const;
	std::tstring GetCurrency() const;
	int GetAmount() const;
	ExpressionSp Reduce( const Bank& cBank, const std::tstring& cstrTo ) const;


protected:
	int m_iAmount;


private:
	std::tstring m_strCurrency;

}; // class Money
